1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect;
18
19 import com.google.caliper.BeforeExperiment;
20 import com.google.caliper.Benchmark;
21 import com.google.caliper.Param;
22 import com.google.common.collect.BenchmarkHelpers.SetImpl;
23 import com.google.common.collect.CollectionBenchmarkSampleData.Element;
24
25 import java.util.Set;
26
27
28
29
30
31
32
33 public class SetContainsBenchmark {
34
35
36 @Param({"5", "30", "180", "1100", "6900", "43000", "260000"})
37 private int size;
38
39
40 @Param({"0.2", "0.8"})
41 private double hitRate;
42
43 @Param("true")
44 private boolean isUserTypeFast;
45
46
47 @Param("")
48 private SpecialRandom random;
49
50 @Param({"Hash", "Immutable"})
51 private SetImpl impl;
52
53
54 private Element[] queries;
55 private Set<Element> setToTest;
56
57 @BeforeExperiment void setUp() {
58 CollectionBenchmarkSampleData sampleData =
59 new CollectionBenchmarkSampleData(
60 isUserTypeFast, random, hitRate, size);
61
62 this.setToTest = impl.create(sampleData.getValuesInSet());
63 this.queries = sampleData.getQueries();
64 }
65
66 @Benchmark boolean contains(int reps) {
67
68
69 Set<Element> set = setToTest;
70 Element[] queries = this.queries;
71
72 int mask = queries.length - 1;
73
74 boolean dummy = false;
75 for (int i = 0; i < reps; i++) {
76 dummy ^= set.contains(queries[i & mask]);
77 }
78 return dummy;
79 }
80 }